% \iffalse meta-comment
%
% Copyright (C) 2013-2016 by Zachary Cao <caozengle@163.com>
%
% This file may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3c
% of this license or (at your option) any later version.
% The latest version of this license is in:
%
% http://www.latex-project.org/lppl.txt
%
% and version 1.3c or later is part of all distributions of LaTeX
% version 2008/05/04 or later.
%
% \fi
%
% \iffalse
%<*driver>
\ProvidesFile{njubachelor.dtx}
%</driver>
%<cls>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
%<cls>\ProvidesClass{njubachelor}
%<cfg>\ProvidesFile{njubachelor.cfg}
%<*cls|cfg>
    [2016/06/06 v3.0 Nanjing University Bachelor's Degree Thesis Template]
%</cls|cfg>
%<*driver>
\documentclass{ltxdoc}
\usepackage{hypdoc}
\usepackage{ctex}
\usepackage{newpxtext,newpxmath}
\usepackage[left=3.5cm,right=3.5cm,top=2.5cm,bottom=2.5cm]{geometry}

% 说明文档命令
\newcommand{\njub}{{\sc NjuBachelor}}
\newcommand{\pkg}[1]{$\texttt{#1}$}
\newcommand{\opt}[1]{$\texttt{#1}$}

\EnableCrossrefs
\CodelineIndex
%\OnlyDescription
\RecordChanges

\begin{document}
  \DocInput{\jobname.dtx}
\end{document}
%</driver>
% \fi
%
% \CheckSum{0}
%
% \CharacterTable
%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
%   Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
%   Digits        \0\1\2\3\4\5\6\7\8\9
%   Exclamation   \!     Double quote  \"     Hash (number) \#
%   Dollar        \$     Percent       \%     Ampersand     \&
%   Acute accent  \'     Left paren    \(     Right paren   \)
%   Asterisk      \*     Plus          \+     Comma         \,
%   Minus         \-     Point         \.     Solidus       \/
%   Colon         \:     Semicolon     \;     Less than     \<
%   Equals        \=     Greater than  \>     Question mark \?
%   Commercial at \@     Left bracket  \[     Backslash     \\
%   Right bracket \]     Circumflex    \^     Underscore    \_
%   Grave accent  \`     Left brace    \{     Vertical bar  \|
%   Right brace   \}     Tilde         \~}
%
% \GetFileInfo{\jobname.dtx}
%
% \changes{v1.0}{}{ 雏形发布。 }
% \changes{v1.1}{}{
%   用延迟命令将 pdf 属性设置移入宏包内，
%   利用延迟命令将行距设置移入宏包内，
%   更新了图表标题字体，
%   开启中文斜体，
%   可选择数学字体默认 \opt{mathptmx} 或 \opt{txfonts}，
%   设置等宽字体 \pkg{Courier New}，
%   增加页眉选项。}
% \changes{v1.2}{}{
%   封面毕业设计和毕业论文切换，
%   可以选择是否是否支持章节模式，
%   页眉可随单双面打印自动调整样式。 }
% \changes{v1.3}{}{
%   新增了可以手动控制换行的标题排版方案，
%   修正了正文中的一些错误。 }
% \changes{v1.4}{}{ 优化了部分代码。 }
% \changes{v1.5}{}{ 修复了 \opt{nochapter} 时无法双面打印的问题。 }
% \changes{v1.6}{}{
%   修复了引用连续参考文献的连字符问题，
%   国家标准的参考文献排版风格。 }
% \changes{v1.7}{}{ 在 Linux 平台进行了测试并修复了一些兼容性问题。 }
% \changes{v1.8}{}{
%   修改了导师及职称的获取命令，
%   增加了致谢，
%   修改 \opt{nochapter} 下的 \cs{section} 标题格式为居中，
%   修正了 \opt{nochapter} 下无法编译带页眉效果的问题，
%   修正了 \opt{nochapter} 选项下参考文献目录条目的对齐问题，
%   修复了某些平台上封面页所填内容左对齐的错误。 }
% \changes{v1.9}{}{ 修正了 \opt{nochapter} 下输出 pdf 书签级别错误。 }
% \changes{v2.0}{}{ 修正了公式字体中数字不是新罗马体的错误，
%   修改了中英文关键词的位置，
%   重定义 \cs{small} 图标标题修改为五号，
%   一级目录缩进调整。 }
% \changes{v2.1}{}{
%   修复了windows下无法复制出正文文本的错误
%   (后经测试失败)。 }
% \changes{v2.2}{}{ 修复了上次更新遗留的一些字体没有加粗的错误。 }
% \changes{v2.3}{}{修改了中文摘要的行间距，
%   修正了英文摘要与 ABSTRACT 字样的行间距，
%   撤销了之前的修改……中文正文仍不支持拷出。 }
% \changes{v2.4}{}{
%   通过引入华文字体解决了由于加粗引起的正文无法复制的错误，
%   更新了对 \pkg{ctex 2.0} 的兼容性。 }
% \changes{v3.0}{2016/06/08}{ 使用 \pkg{docstrip} 重新编写了宏包。 }
%
% \def\indexname{代码索引}
% \def\glossaryname{修改记录}
% \IndexPrologue{
%   \section{\indexname}
%   \textit{意大利体的数字表示描述对应索引项的页码；
%   带下划线的数字表示定义对应索引项的代码行号；
%   罗马字体的数字表示使用对应索引项的代码行号。}}
% \GlossaryPrologue{\section{\glossaryname}}
%
% \title{\bf \njub{}: 南京大学本科毕业论文模板}
% \author{{曹增乐}\\南京大学物理学院\\[5pt]\texttt{caozengle@163.com}}
% \date{\fileversion\ (\filedate)}
% \maketitle\thispagestyle{empty}
%
% \StopEventually{\PrintChanges\PrintIndex}
% \clearpage
%
% \section{实现细节}
%
% \subsection{选项定义及处理}
%
% \begin{macro}{thesis}
% \begin{macro}{design}
% 选择毕业论文或毕业设计
%    \begin{macrocode}
%<*cls>
\newif\ifNJU@thesis
\DeclareOption{thesis}{\NJU@thesistrue}
\DeclareOption{design}{\NJU@thesisfalse}
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \begin{macro}{oneside}
% \begin{macro}{twoside}
% 选择单面打印或双面打印
%    \begin{macrocode}
\newif\ifNJU@oneside
\DeclareOption{oneside}{\NJU@onesidetrue%
  \PassOptionsToClass{oneside}{book}\PassOptionsToClass{oneside}{article}}
\DeclareOption{twoside}{\NJU@onesidefalse%
  \PassOptionsToClass{twoside}{book}\PassOptionsToClass{twoside}{article}}
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \begin{macro}{pageheader}
% \begin{macro}{nopageheader}
% 选择有无页眉
%    \begin{macrocode}
\newif\ifNJU@pageheader
\DeclareOption{pageheader}{\NJU@pageheadertrue}
\DeclareOption{nopageheader}{\NJU@pageheaderfalse}
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \begin{macro}{chapter}
% \begin{macro}{nochapter}
% 是否完全符合本科毕业论文排版要求，
% 选择 \opt{chapter}，论文最高层级为 \cs{chapter}，
% 章标题格式为学校要求的标题格式，不再单独生成论文标题，
% 选择 \opt{nochapter}，完全按学校要求排版，论文最高层级为 \cs{section}。
%    \begin{macrocode}
\newif\ifNJU@chapter
\DeclareOption{chapter}{\NJU@chaptertrue}
\DeclareOption{nochapter}{\NJU@chapterfalse}
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \begin{macro}{longtitle}
% \begin{macro}{shorttitle}
% \begin{macro}{manualtitle}
% 根据标题长短选择标题排版方式，
% 选择 \opt{longtitle}，标题长度任意，封面页及中文摘要左对齐。
% 选择 \opt{shorttitle}，标题居中对齐，适用于较短的标题。
% 选择 \opt{manualtitle}，手动分隔标题，
% 适用于标题长度超出一行，又希望手动分隔以使每一行居中的情况。
%    \begin{macrocode}
\newif\ifNJU@longtitle\NJU@longtitlefalse
\newif\ifNJU@shorttitle\NJU@shorttitlefalse
\newif\ifNJU@manualtitle\NJU@manualtitlefalse
\DeclareOption{longtitle}{\NJU@longtitletrue}
\DeclareOption{shorttitle}{\NJU@shorttitletrue\NJU@longtitlefalse}
\DeclareOption{manualtitle}{\NJU@manualtitletrue\NJU@longtitlefalse}
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \begin{macro}{shortdepspe}
% \begin{macro}{longdepspe}
% 院系名称是否较长，选择以适应不同的中文摘要纸。
%    \begin{macrocode}
\newif\ifNJU@shortdepspe
\DeclareOption{shortdepspe}{\NJU@shortdepspetrue}
\DeclareOption{longdepspe}{\NJU@shortdepspefalse}
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \begin{macro}{defaultmath}
% \begin{macro}{mathptm}
% \begin{macro}{mathtxf}
% 几种不同的数学字体
%    \begin{macrocode}
\newif\ifNJU@notdefaultmath
\DeclareOption{defaultmath}{\NJU@notdefaultmathfalse}
\DeclareOption{mathptm}{\NJU@notdefaultmathtrue\def\NJU@mathpackage{mathptmx}}
\DeclareOption{mathtxf}{\NJU@notdefaultmathtrue\def\NJU@mathpackage{txfonts}}
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% 处理选项，设置默认选项。
% \changes{v3.0}{2016/06/08}{
%   修正了 \opt{openany} 等未定义选项无法传给底层文类的错误。 }
%    \begin{macrocode}
\DeclareOption*{
  \PassOptionsToClass{\CurrentOption}{book}
  \PassOptionsToClass{\CurrentOption}{article}}
\ExecuteOptions%
  {thesis,oneside,nopageheader,nochapter,longtitle,shortdepspe,defaultmath}
\ProcessOptions\relax
%    \end{macrocode}
%
% \subsection{装载文类并调用宏包}
%
% 装载文类
%    \begin{macrocode}
\ifNJU@chapter
  \LoadClass[a4paper,12pt]{book}
\else
  \LoadClass[a4paper,12pt]{article}
\fi
%    \end{macrocode}
% 载入中文支持
%    \begin{macrocode}
\RequirePackage[no-math]{fontspec}
\RequirePackage[UTF8,fontset=none,zihao=-4,heading=true]{ctex}
%    \end{macrocode}
% 载入数学字体
%    \begin{macrocode}
\RequirePackage{amsmath,amsfonts,amssymb,bm}
\RequirePackage{stmaryrd}
\ifNJU@notdefaultmath \RequirePackage{\NJU@mathpackage} \fi
%    \end{macrocode}
% 载入图形相关宏包
%    \begin{macrocode}
\RequirePackage{graphicx}
\RequirePackage{picinpar}
\RequirePackage{wrapfig}
\RequirePackage{subcaption}
%    \end{macrocode}
% 载入表格相关宏包
%    \begin{macrocode}
\RequirePackage[table]{xcolor}
\RequirePackage{longtable}
\RequirePackage{booktabs}
\RequirePackage{tabularx}
\RequirePackage{multirow}
%    \end{macrocode}
% 载入化学相关宏包
%    \begin{macrocode}
\RequirePackage{mhchem}
\RequirePackage{chemfig}
%    \end{macrocode}
% 载入其他设置宏包
%    \begin{macrocode}
\RequirePackage{titletoc}
\RequirePackage[nottoc]{tocbibind}
\RequirePackage{enumerate}
\RequirePackage[format=hang,font=small,%
  justification=centering,labelfont=sf]{caption}
\RequirePackage[colorlinks,citecolor=black,linkcolor=black]{hyperref}
\RequirePackage{calc}
\RequirePackage[numbers,sort&compress]{natbib}
%\RequirePackage{hypernat}
%    \end{macrocode}
% 设置需要在正文开头执行的内容，
% 包括 pdf 文件属性设置和行距设置。
%    \begin{macrocode}
\AtBeginDocument{
  \hypersetup{
    pdftitle={\NJU@ctitle (\NJU@etitle)},
    pdfauthor={\NJU@cauthor (\NJU@eauthor)},
    pdfsubject={\NJU@subject},
    pdfkeywords={\NJU@ckeywords (\NJU@ekeywords)}
  }
  \setlength{\baselineskip}{1.26\baselineskip}
}
%</cls>
%<*cfg>
\def\NJU@subject{南京大学本科毕业论文（设计）}
%</cfg>
%<*cls>
%    \end{macrocode}
%
% \subsection{页面设置}
%
% 页面边距设置，左侧为 3.5 cm，
% 其他各边为 2.5 cm。
%    \begin{macrocode}
\RequirePackage[left=3.5cm,right=2.5cm,top=2.5cm,bottom=2.5cm]{geometry}
%    \end{macrocode}
% 页眉设置如下
%    \begin{macrocode}
\RequirePackage{fancyhdr}
\ifNJU@pageheader
  \pagestyle{fancy}
  \fancyhf{}
  \fancyfoot[C]{\thepage}
  \ifNJU@oneside
    \fancyhead[L]{\fangsong \NJU@subject}
    \fancyhead[R]{\fangsong \leftmark}
  \else
    \fancyhead[EC]{\fangsong \NJU@subject}
    \fancyhead[OC]{\fangsong \leftmark}
  \fi
\else \pagestyle{plain}
\fi
%    \end{macrocode}
%
% \subsection{字体设置}
%
% \changes{v3.0}{2016/06/08}{ 删除了不常用的字体。 }
% \begin{macro}{\songti}
% \begin{macro}{\heiti}
% \begin{macro}{\kaishu}
% \begin{macro}{\fangsong}
% \begin{macro}{\bfsong}
% \begin{macro}{\bfkai}
% 提供宋体，黑体，楷书，仿宋四种基本字体。
% 为解决 \pkg{xeCJK} 宏包导致的
% 加粗某种字体后该字体对应正文无法正常复制的错误，
% 特别对加粗的宋体和楷书引入新的字体命令以供模板中使用。
% 请确认电脑中安装了中易宋、黑、楷、仿，以及华文宋体，华文楷体。
% \cs{xeCJKsetup}\marg{CheckSingle=true}
% 可以在排版中避免单字独占一行，但会导致抄录环境行尾字符向左靠，
% 可依据实际情况在模板中找到相应设置进行修改。
%    \begin{macrocode}
\setmainfont{Times New Roman}
\setsansfont{Arial}
\setmonofont{Courier New}
\xeCJKsetup{AutoFakeSlant={true}}
%\xeCJKsetup{CheckSingle=true}
\setCJKmainfont{SimSun}
\setCJKsansfont{SimHei}
\setCJKmonofont{FangSong}
\setCJKfamilyfont{zhsong}{SimSun}
\setCJKfamilyfont{zhhei}{SimHei}
\setCJKfamilyfont{zhkai}{KaiTi}
\setCJKfamilyfont{zhfs}{FangSong}
\setCJKfamilyfont{zhbfsong}{STSong}
\setCJKfamilyfont{zhbfkai}{STKaiti}
\providecommand*{\songti}{\CJKfamily{zhsong}}
\providecommand*{\heiti}{\CJKfamily{zhhei}}
\providecommand*{\kaishu}{\CJKfamily{zhkai}}
\providecommand*{\fangsong}{\CJKfamily{zhfs}}
\providecommand*{\bfsong}{\bf\CJKfamily{zhbfsong}}
\providecommand*{\bfkai}{\bf\CJKfamily{zhbfkai}}
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
%
% \subsection{宏包命令}
%
% 以下是宏包设计中需要用到的内部命令。
% \begin{macro}{Description}
% 设置列表环境
%    \begin{macrocode}
\newenvironment{Description}[1]{\begin{list}{}{%
  \renewcommand{\makelabel}[1]{##1}\settowidth\labelwidth{\makelabel{#1}}%
  \itemsep=0.5em\setlength{\leftmargin}{\labelwidth+\labelsep}}}{\end{list}}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\cleardoublepage}
% 更新清除双页命令，使占位用的双页不打印任何内容。
%    \begin{macrocode}
\let\NJU@cleardoublepage\cleardoublepage
\newcommand{\NJU@clearemptydoublepage}{%
  \clearpage{\pagestyle{empty}\NJU@cleardoublepage}}
\let\cleardoublepage\NJU@clearemptydoublepage
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\NJU@pdftopmark}
% 根据选项 \opt{chapter} 和 \opt{nochapter}，
% 设置插入 pdf 文件的自定义书签层级。
%    \begin{macrocode}
\ifNJU@chapter
  \newcommand{\NJU@pdftopmark}{0}
\else
  \newcommand{\NJU@pdftopmark}{1}
\fi
%    \end{macrocode}
% \end{macro}
%
% \subsection{格式设置}
%
% \begin{macro}{\NJU@ctitle@format}
% 定义了中文标题格式
%    \begin{macrocode}
\newcommand{\NJU@ctitle@format}[1]{%
  \begin{center}
    \zihao{3}\bfsong #1
  \end{center}}
%    \end{macrocode}
% \end{macro}
% 设置章节标题格式
%    \begin{macrocode}
\ifNJU@chapter
  \ctexset{
    chapter = {
      number = \arabic{chapter},
      format = \centering\zihao{3}\bfsong,
      nameformat = {},
      titleformat = {},
      beforeskip = 1.2em,
      afterskip = 1.8em
    },
    section/format = \sf\zihao{4}
  }
\else
  \ctexset{ section/format = \centering\sf\zihao{4} }
\fi
\ctexset{
  subsection/format = \sf\zihao{-4},
  subsubsection/format = \sf\zihao{-4}
}
%    \end{macrocode}
% 设置目录标题格式
%    \begin{macrocode}
\ifNJU@chapter
  \titlecontents{chapter}[4em/12*14]{\vspace{1.6em}\sf\zihao{4}}%
    {\contentslabel{4em}}{\hspace{-4em}}{\hfill\bf\contentspage}
  \titlecontents{section}[4em/12*14]{}{\contentslabel{2.5em}}
    {\hspace{-2.5em}}{~\titlerule*[1pc]{$\cdot$}\contentspage}
  \titlecontents{subsection}[4em/12*14+3.2em]{}{\contentslabel{3.2em}}
    {\hspace{-3.2em}}{~\titlerule*[1pc]{$\cdot$}\contentspage}
\else
  \titlecontents{section}[1.5em]{\vspace{1.6em}\sf\zihao{4}}%
    {\contentslabel{1.5em}}{\hspace{-1.5em}}{\hfill\bf\contentspage}
\fi
\ifNJU@chapter
  \ctexset{ contentsname = \NJU@contentsname }
\else
  \ctexset{ contentsname = {\zihao{3}\bfsong\NJU@contentsname} }
\fi
%</cls>
%<*cfg>
\def\NJU@contentsname{目~~~录}
%</cfg>
%<*cls>
%    \end{macrocode}
%
% \subsection{用户命令}
%
% \subsubsection{获取文档相关信息}
%
% \begin{macro}{\grade}
% 年级
%    \begin{macrocode}
\def\NJU@grade{}
\newcommand{\grade}[1]{\def\NJU@grade{#1}}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\sid}
% 学号
%    \begin{macrocode}
\def\NJU@sid{}
\newcommand{\sid}[1]{\def\NJU@sid{#1}}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\cauthor}
% \begin{macro}{\eauthor}
% 姓名
%    \begin{macrocode}
\def\NJU@cauthor{}
\newcommand{\cauthor}[1]{\def\NJU@cauthor{#1}}
\def\NJU@eauthor{}
\newcommand{\eauthor}[1]{\def\NJU@eauthor{#1}}
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \begin{macro}{\ctitle}
% \begin{macro}{\etitle}
% \begin{macro}{\mtitle}
% 标题
%    \begin{macrocode}
\def\NJU@ctitle{}
\newcommand{\ctitle}[1]{\def\NJU@ctitle{#1}}
\def\NJU@etitle{}
\newcommand{\etitle}[1]{\def\NJU@etitle{#1}}
\def\NJU@mtitle{}
\newcommand{\mtitle}[1]{\def\NJU@mtitle{#1}}
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \begin{macro}{\cmentor}
% \begin{macro}{\ementor}
% 导师
%    \begin{macrocode}
\def\NJU@cmentor{}
\newcommand{\cmentor}[2]{\def\NJU@cmentor{#1}\def\NJU@cmentortitle{#2}}
\def\NJU@ementor{}
\newcommand{\ementor}[2]{\def\NJU@ementor{#1}\def\NJU@ementortitle{#2}}
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \begin{macro}{\cdepartment}
% \begin{macro}{\edepartment}
% 院系
%    \begin{macrocode}
\def\NJU@cdepartment{}
\newcommand{\cdepartment}[1]{\def\NJU@cdepartment{#1}}
\def\NJU@edepartment{}
\newcommand{\edepartment}[1]{\def\NJU@edepartment{#1}}
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \begin{macro}{\cspecialization}
% \begin{macro}{\especialization}
% 专业
%    \begin{macrocode}
\def\NJU@cspecialization{}
\newcommand{\cspecialization}[1]{\def\NJU@cspecialization{#1}}
\def\NJU@especialization{}
\newcommand{\especialization}[1]{\def\NJU@especialization{#1}}
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \begin{macro}{\cdate}
% \begin{macro}{\edate}
% 日期
%    \begin{macrocode}
\def\NJU@cdate{}
\newcommand{\cdate}[1]{\def\NJU@cdate{#1}}
\def\NJU@edate{}
\newcommand{\edate}[1]{\def\NJU@edate{#1}}
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \begin{macro}{\ckeywords}
% \begin{macro}{\ekeywords}
% 关键词
%    \begin{macrocode}
\def\NJU@ckeywords{}
\newcommand{\ckeywords}[1]{\def\NJU@ckeywords{#1}}
\def\NJU@ekeywords{}
\newcommand{\ekeywords}[1]{\def\NJU@ekeywords{#1}}
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
% \subsubsection{封面}
%
% \begin{macro}{\makectitlepage}
% 生成中文封面
%    \begin{macrocode}
\newcommand{\makectitlepage}{
  \cleardoublepage\thispagestyle{empty}
  \pdfbookmark[\NJU@pdftopmark]{\NJU@ctitlepage@pdftitle}{cover}
  \begin{titlepage}\vspace{3em}
    \includegraphics[width=0.14\textwidth]{njulogos/njulogo.pdf}\vspace{2.6em}
    \begin{center}
      \includegraphics[width=0.5\textwidth]{njulogos/njuname.pdf}\\[2.8em]
      \zihao{1}\bfsong
      \ifNJU@thesis \NJU@ctitlepage@thesis
      \else         \NJU@ctitlepage@design
      \fi
      \vfill
      \begin{minipage}{0.8\textwidth}
        \zihao{3}\rm\kaishu
        \begin{Description}{\NJU@ctitlepage@author}
          \item[\bfkai \NJU@ctitlepage@department]
            \uline{\hfill\NJU@cdepartment\hfill} \par
          \item[\bfkai \NJU@ctitlepage@specialization]
            \uline{\hfill\NJU@cspecialization\hfill} \par
          \item[\bfkai \NJU@ctitlepage@thesistitle]
            \ifNJU@longtitle \uline{\NJU@ctitle\hfill}
            \else
              \ifNJU@shorttitle \uline{\hfill\NJU@ctitle\hfill}
              \else
                \ifNJU@manualtitle
                  \@for \NJU@mtitlen:=\NJU@mtitle \do
                    {\uline{\hfill\NJU@mtitlen\hfill}\par}
					%\uline{\NJU@mtitle\hfill}
                \fi
              \fi
            \fi \par
          \item[\bfkai \NJU@ctitlepage@grad]
                 \uline{\makebox[6em][c]{\NJU@grade}}
               {\bfkai \NJU@ctitlepage@sid}
                 \uline{\hfill\NJU@sid\hfill} \par
          \item[\bfkai \NJU@ctitlepage@author]
            \uline{\hfill\NJU@cauthor\hfill} \par
          \item[\bfkai \NJU@ctitlepage@mentor]
                 \uline{\makebox[6em][c]{\NJU@cmentor}}
               {\bfkai \NJU@ctitlepage@mentortitle}
                 \uline{\hfill\NJU@cmentortitle\hfill} \par
          \item[\bfkai \NJU@ctitlepage@date]
                 \uline{\hfill\NJU@cdate\hfill} \par
        \end{Description}
      \end{minipage}
      \vfill
    \end{center}
  \end{titlepage}}
%</cls>
%<*cfg>
\def\NJU@ctitlepage@pdftitle{封面}
\def\NJU@ctitlepage@thesis{本~~科~~毕~~业~~论~~文}
\def\NJU@ctitlepage@design{本~~科~~毕~~业~~设~~计}
\def\NJU@ctitlepage@author{学生姓名}
\def\NJU@ctitlepage@department{院~~~~~~~~系}
\def\NJU@ctitlepage@specialization{专~~~~~~~~业}
\def\NJU@ctitlepage@thesistitle{题~~~~~~~~目}
\def\NJU@ctitlepage@grad{年~~~~~~~~级}
\def\NJU@ctitlepage@sid{学~~~~~~号}
\def\NJU@ctitlepage@mentor{指导老师}
\def\NJU@ctitlepage@mentortitle{职~~~~~~称}
\def\NJU@ctitlepage@date{提交日期}
%</cfg>
%<*cls>
%    \end{macrocode}
% \end{macro}
%
% \subsubsection{摘要}
%
% \begin{macro}{\makeckeywords}
% \begin{macro}{\makeekeywords}
% 生成中英文关键词，默认在摘要尾部插入关键词，
% 因此实际使用模板时并不需要使用者两条命令。
%    \begin{macrocode}
\newcommand{\makeckeywords}{\zihao{-4}
  \begin{Description}{\NJU@ckeywords@title}
    \item[\NJU@ckeywords@title] \NJU@ckeywords
  \end{Description}}
\newcommand{\makeekeywords}{\zihao{-4}
  \begin{Description}{KEY WORDS:}
    \item[KEY WORDS:] \NJU@ekeywords
  \end{Description}}
%</cls>
%<*cfg>
\def\NJU@ckeywords@title{关键词:}
%</cfg>
%<*cls>
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \begin{macro}{cabstract}
% \begin{macro}{eabstract}
% 中英文摘要环境，
% 用于生成中英文摘要纸，
% 自动在末尾插入中英文关键词。
%    \begin{macrocode}
\newenvironment{cabstract}{
  \cleardoublepage\pagestyle{empty}
  \pdfbookmark[\NJU@pdftopmark]{\NJU@cabstract@pdftitle}{cabstract}
  \begin{center}
    \bfkai\zihao{-2}\uuline{\NJU@cabstract@longtitle}
  \end{center}
  \vspace{0.5em}\kaishu\zihao{4}\noindent
  \begin{Description}{\NJU@cabstract@thesistitle}
    \item[\NJU@cabstract@thesistitle]
      \ifNJU@longtitle {\NJU@ctitle\hfill}
      \else
        \ifNJU@shorttitle {\hfill\NJU@ctitle\hfill}
        \else
          \ifNJU@manualtitle
		    {\NJU@ctitle\hfill}
          \fi
        \fi
      \fi

	\item[\NJU@cabstract@department:] \NJU@cdepartment
	\item[\NJU@cabstract@specialization:] \NJU@cspecialization
	\item[\NJU@cabstract@author] \NJU@cauthor
	\item[\NJU@cabstract@mentor] \NJU@cmentor \NJU@cmentortitle
	\item[\NJU@cabstract@shorttitle] 
  \end{Description}
  
  \par \vspace{1em}\zihao{-4}\setlength{\baselineskip}{1.12\baselineskip}}
  {\kaishu\makeckeywords\clearpage}
\newenvironment{eabstract}{
  \cleardoublepage\pagestyle{empty}
  \pdfbookmark[\NJU@pdftopmark]{ABSTRACT}{eabstract}
  \begin{center}
    \bfkai\zihao{-2}\uuline{\NJU@eabstract@longtitle}
  \end{center}
  \vspace{0.5em}\zihao{4}\noindent
  \begin{Description}{THESIS:}
    \item[THESIS:] \NJU@etitle
    \item[DEPARTMENT:] \NJU@edepartment
    \item[SPECIALIZATION:] \NJU@especialization
    \item[UNDERGRADUATE:] \NJU@eauthor
    \item[MENTOR:] \NJU@ementortitle\ \NJU@ementor
    \item[ABSTRACT:]
  \end{Description}
  \par \vspace{0.2em}\zihao{-4}}
  {\makeekeywords\clearpage}
%</cls>
%<*cfg>
\def\NJU@cabstract@pdftitle{摘要}
\def\NJU@cabstract@shorttitle{摘要:}
\def\NJU@cabstract@longtitle{南京大学本科生毕业论文（设计）中文摘要}
\def\NJU@eabstract@longtitle{南京大学本科生毕业论文（设计）英文摘要}
\def\NJU@cabstract@thesistitle{毕业论文题目:}
\def\NJU@cabstract@department{院系}
\def\NJU@cabstract@specialization{专业}
\def\NJU@cabstract@grad{级}
\def\NJU@cabstract@author{本科生姓名:}
\def\NJU@cabstract@mentor{指导教师（姓名、职称）:}
%</cfg>
%<*cls>
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
% \subsubsection{生成目录}
%
% \begin{macro}{\maketoc}
% \changes{v3.0}{2016/06/08}{ 提供了一个用户命令以生成目录。 }
% 用于生成目录
%    \begin{macrocode}
\newcommand{\maketoc}{\pdfbookmark[0]{%
  \NJU@toc@pdftitle}{contents}\tableofcontents}
%</cls>
%<*cfg>
\def\NJU@toc@pdftitle{目录}
%</cfg>
%<*cls>
%    \end{macrocode}
% \end{macro}
%
% \subsubsection{中文标题}
%
% \begin{macro}{\makectitle}
% 在 \opt{nochapter} 选项下生成中文标题。
%    \begin{macrocode}
\ifNJU@chapter
  \newcommand{\makectitle}{}
\else
  \newcommand{\makectitle}
    {\NJU@ctitle@format{\vspace*{1.6em}\NJU@ctitle\\[2.6em]}}
\fi
%    \end{macrocode}
% \end{macro}
%
% \subsubsection{致谢}
%
% \begin{macro}{\ack}
% \changes{v3.0}{2016/06/08}{
%   确保致谢在 \opt{openright} 选项下于奇数页面开始。 }
% 生成致谢
%    \begin{macrocode}
\ifNJU@chapter
  \newcommand{\ack}{\cleardoublepage
    \chapter*{\NJU@ack@longtitle}
    \addcontentsline{toc}{chapter}{\NJU@ack@shorttitle}
    \markboth{\NJU@ack@shorttitle}{\NJU@ack@shorttitle}}
\else
  \newcommand{\ack}{\cleardoublepage
    \section*{\NJU@ack@longtitle}
    \addcontentsline{toc}{section}{\NJU@ack@shorttitle}
    \markboth{\NJU@ack@shorttitle}{\NJU@ack@shorttitle}}
\fi
%</cls>
%<*cfg>
\def\NJU@ack@shorttitle{致谢}
\def\NJU@ack@longtitle{致~~~谢}
%</cfg>
%<*cls>
%    \end{macrocode}
% \end{macro}
%
% \subsubsection{自定义用户命令}
%
% \begin{macro}{\diff}
% 自定义微分号，算符应使用正体。
%    \begin{macrocode}
\newcommand{\diff}{\mathrm{d}}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\scite}
% 正文中的文献引用以角标形式显示。
%    \begin{macrocode}
\newcommand{\scite}[1]{\textsuperscript{\cite{#1}}}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\unit}
% 单位命令，方便在正文与公式中输入单位。
%    \begin{macrocode}
\newcommand{\unit}[1]{\ensuremath{\,\mathrm{#1}}}
%    \end{macrocode}
% \end{macro}
%
% \subsection{在宏包末尾写入一些命令}
%
%    \begin{macrocode}
\AtEndOfClass{\input{njubachelor.cfg}}
\AtEndOfClass{\sloppy}
%</cls>
%    \end{macrocode}
%
%
%
% \Finale
%
\endinput
